//有效的括号
/*
思路
遍历s，如果是左括号就压栈，如果是右括号就与栈顶元素进行匹配，匹配成功执行出栈操作 如果
遍历完成后，栈中无元素，说明是有效字符串
详解
首先，左括号我们是无法判断是否合法的 因为所谓的不合法是当右括号与左括号不匹配的时候才发
生的
1.  那么我们遇到左括号的时候，先把他推入栈中
2.  当我们遇到右括号的时候，刚好就可以与栈中的左括号进行匹配，如果正确，就把左括号出栈
3.  如果最终栈为空，说明全部匹配成功

*/
const isValid = function(s) {
    const stack = []
    const map = {
        ')':'(',
        '}':"{",
        ']':'['
    }
    for(const c of s){
        console.log(c in map)
        if(!(c in map)){
            stack.push(c);
        }else if(!stack.length || map[c] !==stack.pop()){
            return false;
        }
    }
    return !stack.length;

}
console.log(isValid('()'))
// console.log(isValid('()[]{}'))
// console.log(isValid('(]'))

// console.log(isValid('([)]'))